package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  TODO aggregateByKey算子:存在函数柯里化，可以实现WordCount(4 /10)
     参数说明：第一个参数列表中有一个参数：表示计算初始值
     第二个参数列表中有两个参数--第一个参数：分区内计算规则。第二个参数：分区间的计算规则
//TODO 如果aggregateByKey算子分区内和分区间的计算规则相同的情况下，WordCount(5 /10)
  可以省略成一个,这里用foldByKey()算子

 */

object Spark_RDD_Pper_Transform_AggregateByKey_WordCount {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)


    val rdd = sc.makeRDD(List(("a", 1), "a" -> 2, ("b" -> 3), "b" -> 4, ("b", 5), "a" -> 6), 2)

    val value: RDD[(String, Int)] = rdd.aggregateByKey(0)((x, y) => {
      x + y
    }, (x, y) => {
      x + y
    })

    value.collect().foreach(println)

    val value1: RDD[(String, Int)] = rdd.foldByKey(0)(_ + _)

    value1.collect().foreach(println)
    //TODO 2、关闭连接
    sc.stop()
  }
}